我一直在努力学习ClojureScript并偶然发现了一些非常神秘的函数名称.
例如:
(.-length str)
来自om
文档:
(defn add-contact [data owner] (let [new-contact (-> (om/get-node owner "new-contact") .-value ;;What is this? parse-contact)] (when new-contact (om/transact! data :contacts #(conj % new-contact)))))
那是什么意思.-
?
这些是检索本机JavaScript属性.因此,(.-length str)
将编译到JavaScript str.length
.
将此与ClojureScript进行对比(.length str)
,后者将编译为方法调用str.length()
- 这是一个相当不同的事情.
在om
给定的情况下,代码按顺序执行以下操作:
打电话get-node
,并取得结果
value
取得那个结果的财产
parse-contact
传递具有该值的函数.
这是因为线程宏->
将每个阶段的结果替换为下一个阶段的第一个参数 - 使该代码等效于(parse-contact (.-value (om/get-node owner "new-contact")))
.